function isValid(s: string): boolean {
  const stack: string[] = [];
  for (let i = 0; i < s.length; i++) {
    let curStr = s[i];
    if (curStr === "(") stack.push(")");
    else if (curStr === "{") stack.push("}");
    else if (curStr === "[") stack.push("]");
    // !stack.length：说明此时字符是右括号，但是之前没有找到对应的左括号
    // stack[stack.length - 1] !== curStr：代表栈顶不是当前的右括号，说明括号不匹配
    else if (!stack.length || stack[stack.length - 1] !== curStr) return false;
    // 匹配上了就出栈
    else stack.pop();
  }
  // 还有一种不符合要求的情况，栈没有清空，此时代表着有左括号没有被匹配上
  return !stack.length;
}
